package org.chen.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.*;
import org.chen.domain.dto.TaskQueryDTO;
import org.chen.domain.entity.VideoTask;

import java.util.List;
import java.util.Set;

@Mapper
public interface VideoTaskMapper extends BaseMapper<VideoTask> {
    
    /**
     * 根据回调ID查询任务
     */
    @Select("SELECT * FROM video_task WHERE callback_id = #{callbackId}")
    VideoTask selectByCallbackId(@Param("callbackId") String callbackId);
    
    /**
     * 批量插入任务
     */
    @Insert({
        "<script>",
        "INSERT INTO video_task (id,article_id, callback_id, config_id, title, description, avatar_id, voice_id, status, create_time, category_id, category_path, width, height , background_id, is_multi_avatar, task_group_id, avatar_index) VALUES ",
        "<foreach collection='tasks' item='task' separator=','>",
        "(#{task.id}, #{task.articleId}, #{task.callbackId}, #{task.configId}, #{task.title}, #{task.description}, ",
        "#{task.avatarId}, #{task.voiceId}, #{task.status}, NOW(), #{task.categoryId}, #{task.categoryPath}, #{task.width}, #{task.height}, #{task.backgroundId}, #{task.isMultiAvatar}, #{task.taskGroupId}, #{task.avatarIndex})",
        "</foreach>",
        "</script>"
    })
    int batchInsert(@Param("tasks") List<VideoTask> tasks);

    // 获取任务的重试次数
    @Select("SELECT retry_count FROM video_task WHERE id = #{taskId}")
    Integer getRetryCount(String taskId);

    // 初始化重试次数
    @Update("UPDATE video_task SET retry_count = #{count} WHERE id = #{taskId}")
    void initRetryCount(String taskId, Integer count);

    // 增加重试次数
    @Update("UPDATE video_task SET retry_count = retry_count + 1 WHERE id = #{taskId}")
    void incrementRetryCount(String taskId);

    // 重置重试次数
    @Update("UPDATE video_task SET retry_count = 0 WHERE id = #{taskId}")
    void resetRetryCount(String taskId);
}